package com.code2roc.jarmanage.servlet.nginx;

import cn.hutool.core.thread.ThreadUtil;
import com.code2roc.jarmanage.db.ConfigDB;
import com.code2roc.jarmanage.model.ConfigDO;
import com.code2roc.jarmanage.model.Result;
import com.code2roc.jarmanage.util.CommonUtil;
import com.code2roc.jarmanage.util.ConvertUtil;
import com.code2roc.jarmanage.util.LogUtil;
import com.code2roc.jarmanage.util.ZipUtil;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;

public class NginxFileZipServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Result result = Result.okResult();
        HashMap paramMap = CommonUtil.getParamMap(req);
        String prefix = ConvertUtil.convert2String(paramMap.get("prefix"));
        String fileName = ConvertUtil.convert2String(paramMap.get("fileName"));
        String zipGuid = ConvertUtil.convert2String(paramMap.get("zipGuid"));
        ConfigDO configDO = ConfigDB.selectOne("NGINX_HOME");
        String basePath = configDO.getConfigValue() + File.separator + "html" + File.separator;
        String filePath = basePath + prefix;
        String beZipfilePath = filePath + File.separator + fileName;
        DateFormat df = new SimpleDateFormat("[yyyy_MM_dd][HHmmss]");
        String tag = df.format(new Date());
        String zipFilePath = filePath + File.separator + fileName + "_backup_" + tag + ".zip";
        ThreadUtil.execAsync(() -> {
            try {
                ZipUtil.compress(beZipfilePath, zipFilePath,zipGuid);
            } catch (Exception e) {
                LogUtil.error(e);
            }
        });
        resp.getWriter().println(result.toString());
    }
}
